 //控制层 
app.controller('goodsController' ,function($scope,$controller,$location,goodsService,uploadService,itemCatService,typeTemplateService){


	$controller('baseController',{$scope:$scope});//继承

	$scope.status=['未审核','审核中','审核已通过','驳回'];



       $scope.itemClear=function (){
		   $scope.entity.tbGoodsDesc.specificationItems=[]
		   $scope.entity.itemList=[]
	   }
	$scope.createItemList = function(){
		/**
		 * 先初始化一行
		 */
		//$scope.entity.itemList=[{spec:{},price:0,num:99999,status:'0',isDefault:'0' } ]
		$scope.entity.itemList=[{spec:{},price:0,num:99999,status:'0',isDefault:'0' }]
		/**
		 *把选中的规格拿出来，赋给SKU，然后我们要根据选中的去遍历
		 * 增加商品的SKU信息
		 */
		var items=  $scope.entity.tbGoodsDesc.specificationItems;

		for(var x=0;x<items.length;x++){
			/**
			 * 开始添加，为了代码的可读性和复用性，添加我们单独拉出去，写一个方法
			 * 这个方法要是在当前的controller里面写，可以不用$scope(在别的controller或者页面中调用不到)
			 */
			$scope.entity.itemList = addColumn($scope.entity.itemList,items[x].attributeName,items[x].attributeValue);
		}
	}

	/**
	 * 三个参数，第一个参数是集合SKU集合
	 * 就是商品中用户选择的 规格属性的名字 attributeName
	 * 第三个就是规格属性的值
	 */
	addColumn = function(list,columnName,conlumnValues){
		var newList=[];//新的集合
		/**
		 * 第一层相当于遍历的  网络和机身内存，就是商品的规格
		 * 第二次，遍历的是每个具体的规格里面的选项
		 *
		 */
		for(var x=0;x<list.length;x++){
			//把原来的行记录下来
			var oldRow= list[x];
			//遍历规格对应的规格选项
			for(var y=0;y<conlumnValues.length;y++){
				/**
				 * 把原来的行赋值进去新行里面了，
				 */
				var newRow= JSON.parse(JSON.stringify(oldRow));//深克隆
				/**
				 * 然后规格选项的内容在追加到后面，放进新的结合里面去
				 */
				newRow.spec[columnName]=conlumnValues[y];
				newList.push(newRow);
			}
		}
		return newList;
	}


	//list就是要找的几个，key是几个里面的对象的名字   keyvalue是集合里面孩子的名字
	$scope.searchObjectByKey=function(list,key,keyValue){
		for(var i=0;i<list.length;i++){
			if(list[i][key]==keyValue){
				return list[i];
			}
		}
		return null;
	}
	$scope.updateSpecAttribute = function($event,name,value){
		/**
		 * 这个三个参数是  this，   规格的名字，  规格选项的名字
		 */
		/**
		 * 当点击复选框的时候，触发的这个方法，有可能是去掉选择，有可能是选中的
		 * 都要在entity（商品实体）中先找到  规格这个对象（），然后再在这个里面里面 找到 目前操作的这个规格
		 */

		var obj = $scope.searchObjectByKey($scope.entity.tbGoodsDesc.specificationItems,'attributeName',name);
		if(obj!=null){
			/**
			 * 我们要开始判断用户是选中了还是取消了
			 */
			if($event.target.checked){
				/**
				 * 到了这里就是用户选择了
				 */
				obj.attributeValue.push(value);
			}else{
				/**
				 * 取消了
				 */
				var number = obj.attributeValue.indexOf(value);
				obj.attributeValue.splice(number,1);

				if(obj.attributeValue.length==0){
					var objindex = $scope.entity.tbGoodsDesc.specificationItems.indexOf(obj);
					$scope.entity.tbGoodsDesc.specificationItems.splice(objindex,1);

				}

			}
		}else{
			/**
			 * 就是这个是当前这个规格没有选择过，所以规格对象  ==null，那么就按照要求，把规格放进去，下一次去获取就是null了
			 */
			$scope.entity.tbGoodsDesc.specificationItems.push({"attributeName":name,"attributeValue":[value]});
		}
	}


	$scope.$watch('entity.tbGoods.typeTemplateId',function (newValue,oldValue) {
		typeTemplateService.findOne(newValue).success(
			function (response) {
			    $scope.typeTemplate=response;
			    //品牌
				$scope.typeTemplate.brandIds=JSON.parse(response.brandIds);
				//扩展属性
				$scope.entity.tbGoodsDesc.customAttributeItems=JSON.parse(response.customAttributeItems);
			});
		//查询屏幕尺寸
        typeTemplateService.findSpecList(newValue).success(function (response) {
            $scope.specList=response;
        });
	})


	$scope.$watch('entity.tbGoods.category3Id',function (newValue,oldValue) {
		itemCatService.findOne(newValue).success(function (response) {
			$scope.entity.tbGoods.typeTemplateId=response.typeId;
		});
	})

	$scope.$watch('entity.tbGoods.category2Id',function (newValue,oldValue) {
		itemCatService.findItemByPid(newValue).success(function (response) {
			$scope.itemCat3List = response;
		});
	})

	$scope.$watch('entity.tbGoods.category1Id',function (newValue,oldValue) {
		$scope.itemCat3List=[];
		itemCatService.findItemByPid(newValue).success(function (response) {
			$scope.itemCat2List = response;
		});
	})

	$scope.selectItemCat1List = function(){
		$scope.itemCat2List=[];
		$scope.itemCat3List=[];
		itemCatService.findItemByPid(0).success(function (response) {
			$scope.itemCat1List = response;
		});
	}



    $scope.entity={tbGoods:{},tbGoodsDesc:{itemImages:[]}};//定义页面实体结构
    //添加图片列表
    $scope.add_image_entity=function(){
        $scope.entity.tbGoodsDesc.itemImages.push($scope.image_entity);
    }



	$scope.image_entity={};
    /**
     * 上传图片
     */
    $scope.uploadFile=function(){
        uploadService.uploadFile().success(function(response) {
            if(response.success){//如果上传成功，取出url
                $scope.image_entity.url=response.message;//设置文件地址
            }else{
                alert(response.message);
            }
        }).error(function() {
            alert("上传发生错误");
        });
    };

    //读取列表数据绑定到表单中  
	$scope.findAll=function(){
		goodsService.findAll().success(
			function(response){
				$scope.list=response;
			}			
		);
	}    
	
	//分页
	$scope.findPage=function(page,rows){			
		goodsService.findPage(page,rows).success(
			function(response){
				$scope.list=response.rows;	
				$scope.paginationConf.totalItems=response.total;//更新总记录数
			}			
		);
	}
	
	//查询实体 
	$scope.findOne=function(id){				
		goodsService.findOne(id).success(
			function(response){
				$scope.entity= response;
				$scope.entity.tbGoodsDesc.customAttributeItems =JSON.parse($scope.entity.tbGoodsDesc.customAttributeItems);
				for (var i = 0;i<$scope.entity.itemList.length;i++){
					$scope.entity.itemList[i].spec=JSON.parse($scope.entity.itemList[i].spec);
				}
				$scope.entity.tbGoodsDesc.specificationItems=JSON.parse($scope.entity.tbGoodsDesc.specificationItems);
				editor.html($scope.entity.tbGoodsDesc.introduction);
			}
		);				
	}

	//保存 
	$scope.save=function(){
		/*我们在写后台试题组合类的时候，把变量名字改了*/
        $scope.entity.tbGoodsDesc.introduction=editor.html();
		var serviceObject;//服务层对象
		if($scope.entity.tbGoods.id!=null){//如果有ID
			serviceObject=goodsService.update( $scope.entity ); //修改  
		}else{
			serviceObject=goodsService.add($scope.entity);//增加
		}				
		serviceObject.success(
			function(response){
				if(response.success){
                    $scope.entity={};
                    editor.html('');//清空富文本编辑器
				}else{
					alert(response.message);
				}
			}		
		);				
	}
	
	 
	//批量删除 
	$scope.dele=function(){
		//获取选中的复选框			
		goodsService.dele( $scope.selectIds ).success(
			function(response){
				if(response.success){
					$scope.reloadList();//刷新列表
				}						
			}		
		);				
	}
	
	$scope.searchEntity={};//定义搜索对象 
	
	//搜索
	$scope.search=function(page,rows){			
		goodsService.search(page,rows,$scope.searchEntity).success(
			function(response){
				$scope.list=response.rows;	
				$scope.paginationConf.totalItems=response.total;//更新总记录数
			}			
		);
	}
	$scope.itemCatList=[];//商品分类列表
  $scope.itemCatFindById=function(){
	  itemCatService.findAll().success(
		  function (response) {
			  for(var i=0;i<response.length;i++){
				  $scope.itemCatList[response[i].id]=response[i].name;
			  }
		 })
  }

	//提交审核
	$scope.setAuditStatus=function () {
		goodsService.setAuditStatus($scope.selectIds).success(
			function (response) {
				if(response.success){
				 	$scope.reloadList();//重新加载
				}else{
					alert(response.message);
				}
		})
	}
  $scope.init=function () {
	 //这个是自己写的获取地址栏上的参数
	  var id1 = $scope.GetQueryString("id");

	  //使用angularJS提供的$location服务获取参数必须在地址栏的参数前加#号
	  var id2 = $location.search()["id"];

	  if(id2!=null){
		 //拿到id后去做回显,直接调用我们写好的findOne方法,通过ng-model实现回显
		  $scope.findOne(id2);
	  }
  }

  //通过地址栏实现两个页面互通
  $scope.toUpdate=function (id) {
	  window.location.href='goods_edit.html#?id='+id;
  }

});	
